package sv1

import (
	"github.com/gin-gonic/gin"
	"go-vue/admin/adapt"
	"go-vue/admin/model"
	"go-vue/admin/utils"
)

type Depart struct {
}

// InitList 菜单列表（编辑列表）
func (depart *Depart) InitList(ctx *gin.Context) {
	editList := new(model.SystemDepart).GetAllInitDepart()
	utils.OutSuccess(ctx, editList)
}

// EditList 部门列表（编辑列表）
func (depart *Depart) EditList(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "depart.list") {
		utils.Forbidden(ctx, "depart.list")
		return
	}

	editList := new(model.SystemDepart).GetAllEditDepart()
	utils.OutSuccess(ctx, editList)
}

// EditSave 保存列表（编辑列表）
func (depart *Depart) EditSave(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "depart.edit") {
		utils.Forbidden(ctx, "depart.edit")
		return
	}
	input := &model.SystemDepartEditList{}
	err := ctx.BindJSON(input)
	if err != nil {
		utils.OutWrong(ctx, 400, "解析数据错误", nil)
		return
	}

	id, err := new(model.SystemDepart).SaveEditDepart(input)
	if err != nil {
		utils.OutWrong(ctx, 500, "保存失败", err.Error())
		return
	}

	//回显
	departInfo := &model.SystemDepart{DepartId: id}
	departInfo.One()
	info := &model.SystemDepartEditList{
		Id:       id,
		Level:    departInfo.DepartLevel,
		ParentId: departInfo.DepartPid,
		Name:     departInfo.DepartName,
		State:    departInfo.State,
		Children: nil,
	}
	utils.OutSuccess(ctx, info)
}

// EditSort 排序列表（编辑列表）
func (depart *Depart) EditSort(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "depart.edit") {
		utils.Forbidden(ctx, "depart.edit")
		return
	}

	input := &model.MenuSortInput{}
	err := ctx.BindJSON(input)
	if err != nil {
		utils.OutWrong(ctx, 400, "解析数据错误", nil)
		return
	}

	err = new(model.SystemDepart).SortEditDepart(input)
	if err != nil {
		utils.OutWrong(ctx, 500, "排序失败", err.Error())
		return
	}

	utils.OutSuccess(ctx, nil)
}

//EditDel 删除列表（编辑列表）
func (depart *Depart) EditDel(ctx *gin.Context) {
	//权限控制
	if adapt.ComparePermission(ctx, "depart.delete") {
		utils.Forbidden(ctx, "depart.delete")
		return
	}

	input := &model.DeleteInputIds{}
	err := ctx.BindJSON(input)
	if err != nil {
		utils.OutWrong(ctx, 400, "解析数据错误", err)
		return
	}

	err = new(model.SystemDepart).DelEditDepart(input)
	if err != nil {
		utils.OutWrong(ctx, 500, "保存失败", err.Error())
		return
	}

	utils.OutSuccess(ctx, nil)
}
